package com.zzg.datastructure.hashtab;

import java.util.Objects;

/**
 * @Author zhengzg
 * @Date 2022-09-16
 * @Version v1.0
 */
public class HashTable {
    private EmpLinkedList[] empLinkedLists;

    // 表示多少条链表
    private int size;

    public HashTable(int size) {
        this.empLinkedLists = new EmpLinkedList[size];
        this.size = size;
        // 注意要初始化每条链表，否则会出现空指针
        for (int i = 0; i < size; i++) {
            empLinkedLists[i] = new EmpLinkedList();
        }
    }

    // 添加雇员
    public void add(Emp emp) {
        int empLinkedListNo = hashFun(emp.id);
        empLinkedLists[empLinkedListNo].add(emp);
    }

    // 遍历所有的链表
    public void list() {
        for (int i = 0; i < size; i++) {
            empLinkedLists[i].list(i);
        }
    }

    // 根据输入的ID查找雇员
    public void findEmpById(int id) {
        // 使用散列算法找到雇员所在的链表
        int empNo = hashFun(id);
        Emp emp = empLinkedLists[empNo].findEmpById(id);
        if (Objects.nonNull(emp)) {
            System.out.printf("在第%d条链表中找到 雇员id = %d\n",(empNo + 1),id);
        } else {
            System.out.println("没有找到该雇员");
        }
    }

    private int hashFun(int id) {
        return id % size;
    }
}
